///////////////////////////////////////////////////////////
///////////////// Have an itch? Scratch it! ///////////////
///////////////////////// SCRATCH /////////////////////////
/////////////////////  A MUD  Server   ////////////////////
///////////////////// By: Jared Devall ////////////////////
/////////////////////      Thanks:     ////////////////////
/////////////////////  DIKU/Merc/ROM   ////////////////////
///////////////////// Aetas/Deus Gang  ////////////////////
/////////////////////       Beej       ////////////////////
///////////////////////////////////////////////////////////

#ifndef CREATURE_H
#define CREATURE_H

#include "definitions.h"
#include <list>
#include "room.h"
#include "equipment.h"


using namespace std;


class Creature {
	protected:
		std::string	_name;
		int		_race;
		int		_class;
		int		_goldheld;
		int		_silverheld;
		int		_pos;
		Room*	_room;
		int		_level;
		int		_mstr;
		int		_str;
		int		_mdex;
		int		_dex;
		int		_mcon;
		int		_con;
		int		_mintel;
		int		_intel;
		int		_mwis;
		int		_wis;
		int		_mcha;
		int		_cha;
		int		_mhp;
		int		_hp;
		int		_mmana;
		int		_mana;
		int		_mmove;
		int		_move;
		int		_ac;
		int		_acbash;
		int		_acslash;
		int		_acpierce;
		int		_acexotic;
		int		_hr;
		int		_dr;
		int		_saves;
		int		_wimpy;
		int		_gender;
		int		_height;
		int		_weight;
		int		_witems;
		int		_age;
		std::string _desc;
		std::list< Object* > _inventory;

	public:	
		Creature();
		//Creature( Creature& );
		~Creature();

		Creature& operator = ( Creature& );

		std::string& getName();
		void	setName( std::string& );
		std::string& getPrompt( void );
		void	setPrompt( std::string& );
		int		getRace();
		void	setRace( int );
		int		getClass();
		void	setClass( int );
		int		getGoldheld();
		void	setGoldheld( int );
		int		getSilverheld();
		void	setSilverheld( int );
		int		getPos();
		void	setPos( int );
		Room*	getRoom();
		void	setRoom( int );
		int		getLevel();
		void	setLevel( int );
		int		getMstr();
		void	setMstr( int );
		int		getStr();
		void	setStr( int );
		int		getMdex();
		void	setMdex( int );
		int		getDex();
		void	setDex( int );
		int		getMcon();
		void	setMcon( int );
		int		getCon();
		void	setCon( int );
		int		getMintel();
		void	setMintel( int );
		int		getIntel();
		void	setIntel( int );
		int		getMwis();
		void	setMwis( int );
		int		getWis();
		void	setWis( int );
		int		getMcha();
		void	setMcha( int );
		int		getCha();
		void	setCha( int );
		int		getMhp();
		void	setMhp( int );
		int		getHp();
		void	setHp( int );
		int		getMmana();
		void	setMmana( int );
		int		getMana();
		void	setMana( int );
		int		getMmove();
		void	setMmove( int );
		int		getMove();
		void	setMove( int );
		int		getAc();
		void	setAc( int );
		int		getAcbash();
		void	setAcbash( int );
		int		getAcslash();
		void	setAcslash( int );
		int		getAcpierce();
		void	setAcpierce( int );
		int		getAcexotic();
		void	setAcexotic( int );
		int		getHr();
		void	setHr( int );
		int		getDr();
		void	setDr( int );
		int		getSaves();
		void	setSaves( int );
		int		getWimpy();
		void	setWimpy( int );
		int		getGender();
		void	setGender( int );
		int		getHeight();
		void	setHeight( int );
		int		getWeight();
		void	setWeight( int );
		int		getWitems();
		void	setWitems( int );
		int		getAge();
		void	setAge( int );
		std::string& getDesc( void );
		void	setDesc( std::string );
		std::list< Object* >& getInventory();
		void	add( Object* );
		void	remove( Object* );
		Object* findObject( std::string );

		// Methods...
		void	Save( std::ofstream&, Room* = NULL );
		void	Load( std::ifstream& );
		std::string stringRace();
		static int intRace( std::string );
		std::string stringClass();
		static int intClass( std::string );
		std::string stringGender();
		static int intGender( std::string );
};


#endif // #ifndef CREATURE_H
